{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is used to debug https://github.com/pygae/galgebra/issues/?? .\n",
    "\n",
    "The following code uses https://github.com/pygae/galgebra/tree/new_printer ."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$$ \n",
       "\\DeclareMathOperator{\\Tr}{Tr}\n",
       "\\DeclareMathOperator{\\Adj}{Adj}\n",
       "\\newcommand{\\bfrac}[2]{\\displaystyle\\frac{#1}{#2}}\n",
       "\\newcommand{\\lp}{\\left (}\n",
       "\\newcommand{\\rp}{\\right )}\n",
       "\\newcommand{\\paren}[1]{\\lp {#1} \\rp}\n",
       "\\newcommand{\\half}{\\frac{1}{2}}\n",
       "\\newcommand{\\llt}{\\left <}\n",
       "\\newcommand{\\rgt}{\\right >}\n",
       "\\newcommand{\\abs}[1]{\\left |{#1}\\right | }\n",
       "\\newcommand{\\pdiff}[2]{\\bfrac{\\partial {#1}}{\\partial {#2}}}\n",
       "\\newcommand{\\npdiff}[3]{\\bfrac{\\partial^{#3} {#1}}{\\partial {#2}^{#3}}}\n",
       "\\newcommand{\\lbrc}{\\left \\{}\n",
       "\\newcommand{\\rbrc}{\\right \\}}\n",
       "\\newcommand{\\W}{\\wedge}\n",
       "\\newcommand{\\prm}[1]{{#1}'}\n",
       "\\newcommand{\\ddt}[1]{\\bfrac{d{#1}}{dt}}\n",
       "\\newcommand{\\R}{\\dagger}\n",
       "\\newcommand{\\deriv}[3]{\\bfrac{d^{#3}#1}{d{#2}^{#3}}}\n",
       "\\newcommand{\\grd}[1]{\\left < {#1} \\right >}\n",
       "\\newcommand{\\f}[2]{{#1}\\lp {#2} \\rp}\n",
       "\\newcommand{\\eval}[2]{\\left . {#1} \\right |_{#2}}\n",
       "\\newcommand{\\bs}[1]{\\boldsymbol{#1}}\n",
       "\\newcommand{\\es}[1]{\\boldsymbol{e}_{#1}}\n",
       "\\newcommand{\\eS}[1]{\\boldsymbol{e}^{#1}}\n",
       "\\newcommand{\\grade}[2]{\\left < {#1} \\right >_{#2}}\n",
       "\\newcommand{\\lc}{\\rfloor}\n",
       "\\newcommand{\\rc}{\\lfloor}\n",
       "\\newcommand{\\T}[1]{\\text{#1}}\n",
       "\\newcommand{\\lop}[1]{\\overleftarrow{#1}}\n",
       "\\newcommand{\\rop}[1]{\\overrightarrow{#1}}\n",
       "\\newcommand{\\ldot}{\\lfloor}\n",
       "\\newcommand{\\rdot}{\\rfloor}\n",
       "\n",
       "%MacDonald LaTeX macros\n",
       "\n",
       "\\newcommand   {\\thalf}    {\\textstyle \\frac{1}{2}}\n",
       "\\newcommand   {\\tthird}   {\\textstyle \\frac{1}{3}}\n",
       "\\newcommand   {\\tquarter} {\\textstyle \\frac{1}{4}}\n",
       "\\newcommand   {\\tsixth}   {\\textstyle \\frac{1}{6}}\n",
       "\n",
       "\\newcommand   {\\RE}       {\\mathbb{R}}\n",
       "\\newcommand   {\\GA}       {\\mathbb{G}}\n",
       "\\newcommand   {\\inner}    {\\mathbin{\\pmb{\\cdot}}}\n",
       "\\renewcommand {\\outer}    {\\mathbin{\\wedge}}\n",
       "\\newcommand   {\\cross}    {\\mathbin{\\times}}\n",
       "\\newcommand   {\\meet}     {\\mathbin{{\\,\\vee\\;}}}\n",
       "\\renewcommand {\\iff}              {\\Leftrightarrow}\n",
       "\\renewcommand {\\impliedby}{\\Leftarrow}\n",
       "\\renewcommand {\\implies}  {\\Rightarrow}\n",
       "\\newcommand   {\\perpc}    {\\perp}  % Orthogonal complement\n",
       "\\newcommand   {\\perpm}    {*}  % Dual of multivector\n",
       "\\newcommand   {\\del}      {\\mathbf{\\nabla}}  %{\\boldsymbol\\nabla\\!}\n",
       "\\newcommand   {\\mpart}[2]{\\left\\langle\\, #1 \\,\\right\\rangle_{#2}} % AMS has a \\part\n",
       "\\newcommand   {\\spart}[1]{\\mpart{#1}{0}}\n",
       "\\newcommand   {\\ds}       {\\displaystyle}\n",
       "\\newcommand   {\\os}       {\\overset}\n",
       "\\newcommand   {\\galgebra} {\\mbox{$\\mathcal{G\\!A}$\\hspace{.01in}lgebra}}\n",
       "\\newcommand   {\\latex}    {\\LaTeX}\n",
       " $$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sympy import symbols, sin, cos, Abs\n",
    "from galgebra.ga import Ga\n",
    "from galgebra.printer import Format, Fmt\n",
    "from IPython.display import Latex\n",
    "Format()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$$\\left[\\begin{matrix}1 & 0 & 0\\\\0 & 1 & 0\\\\0 & 0 & 1\\end{matrix}\\right]$$"
      ],
      "text/plain": [
       " \\left [ \\begin{array}{ccc} 1 & 0 & 0  \\\\ 0 & 1 & 0  \\\\ 0 & 0 & 1  \\end{array}\\right ] "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xyz_coords = (x, y, z) = symbols('x y z', real=True)\n",
    "(o3d, ex, ey, ez) = Ga.build('e', g=[1, 1, 1], coords=xyz_coords, norm=True)\n",
    "o3d.g"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$$\\left [ e_{x}, \\quad e_{y}, \\quad e_{z}\\right ]$$"
      ],
      "text/plain": [
       "[eₓ, e_y, e_z]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "o3d.basis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$$\\left [ \\left [ \\right ], \\quad \\left [ e_{x}, \\quad e_{y}, \\quad e_{z}\\right ], \\quad \\left [ e^{e}_{x y}, \\quad e^{e}_{x z}, \\quad e^{e}_{y z}\\right ], \\quad \\left [ e^{e e}_{x y z}\\right ]\\right ]$$"
      ],
      "text/plain": [
       "[[], [eₓ, e_y, e_z], [e_x_y__e, e_x_z__e, e_y_z__e], [e_x_y_z__e__e]]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# FIXME BUG\n",
    "o3d.blades"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$$ [[], [\\boldsymbol{e}_{x}, \\boldsymbol{e}_{y}, \\boldsymbol{e}_{z}], [\\boldsymbol{e}_{x}\\wedge \\boldsymbol{e}_{y}, \\boldsymbol{e}_{x}\\wedge \\boldsymbol{e}_{z}, \\boldsymbol{e}_{y}\\wedge \\boldsymbol{e}_{z}], [\\boldsymbol{e}_{x}\\wedge \\boldsymbol{e}_{y}\\wedge \\boldsymbol{e}_{z}]]  $$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(o3d.blades)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$$ g =  \\left [ \\begin{array}{ccc} \\left ( e_{1}\\cdot e_{1}\\right )  & \\left ( e_{1}\\cdot e_{2}\\right )  & \\left ( e_{1}\\cdot e_{3}\\right )   \\\\ \\left ( e_{1}\\cdot e_{2}\\right )  & \\left ( e_{2}\\cdot e_{2}\\right )  & \\left ( e_{2}\\cdot e_{3}\\right )   \\\\ \\left ( e_{1}\\cdot e_{3}\\right )  & \\left ( e_{2}\\cdot e_{3}\\right )  & \\left ( e_{3}\\cdot e_{3}\\right )   \\end{array}\\right ]   $$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/latex": [
       "$$ a = a^{1} \\boldsymbol{e}_{1} + a^{2} \\boldsymbol{e}_{2} + a^{3} \\boldsymbol{e}_{3}  $$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/latex": [
       "$$ b = b^{1} \\boldsymbol{e}_{1} + b^{2} \\boldsymbol{e}_{2} + b^{3} \\boldsymbol{e}_{3}  $$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/latex": [
       "$$ c = c^{1} \\boldsymbol{e}_{1} + c^{2} \\boldsymbol{e}_{2} + c^{3} \\boldsymbol{e}_{3}  $$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/latex": [
       "$$ I = \\frac{1}{\\sqrt{\\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right ) ^{2} - \\left ( e_{1}\\cdot e_{2}\\right ) ^{2} \\left ( e_{3}\\cdot e_{3}\\right )  + 2 \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  - \\left ( e_{1}\\cdot e_{3}\\right ) ^{2} \\left ( e_{2}\\cdot e_{2}\\right ) }} \\boldsymbol{e}_{1}\\wedge \\boldsymbol{e}_{2}\\wedge \\boldsymbol{e}_{3}  $$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/latex": [
       "$$ (e_\\W e_2\\W e_3)^2 = - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right ) ^{2} + \\left ( e_{1}\\cdot e_{2}\\right ) ^{2} \\left ( e_{3}\\cdot e_{3}\\right )  - 2 \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  + \\left ( e_{1}\\cdot e_{3}\\right ) ^{2} \\left ( e_{2}\\cdot e_{2}\\right )   $$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/latex": [
       "$$ (e_\\W e_2\\W e_3)(b\\W c) =  \\begin{align*}  & \\left ( - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{1} c^{2} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{2} c^{1} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{1} c^{3} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{3} c^{1} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  b^{1} c^{2} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  b^{2} c^{1} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{1} c^{3} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{3} c^{1} - \\left ( e_{2}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{2} c^{3} + \\left ( e_{2}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{3} c^{2} + \\left ( e_{2}\\cdot e_{3}\\right ) ^{2} b^{2} c^{3} - \\left ( e_{2}\\cdot e_{3}\\right ) ^{2} b^{3} c^{2}\\right ) \\boldsymbol{e}_{1} \\\\  &  + \\left ( \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{1} c^{2} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{2} c^{1} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{1} c^{3} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{3} c^{1} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  b^{1} c^{2} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  b^{2} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{2} c^{3} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{3} c^{2} - \\left ( e_{1}\\cdot e_{3}\\right ) ^{2} b^{1} c^{3} + \\left ( e_{1}\\cdot e_{3}\\right ) ^{2} b^{3} c^{1} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{2} c^{3} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{3} c^{2}\\right ) \\boldsymbol{e}_{2} \\\\  &  + \\left ( - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  b^{1} c^{2} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  b^{2} c^{1} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{1} c^{3} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{3} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right ) ^{2} b^{1} c^{2} - \\left ( e_{1}\\cdot e_{2}\\right ) ^{2} b^{2} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  b^{1} c^{3} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  b^{3} c^{1} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{2} c^{3} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{3} c^{2} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  b^{2} c^{3} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  b^{3} c^{2}\\right ) \\boldsymbol{e}_{3}  \\end{align*} \n",
       "  $$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def cross(x, y):\n",
    "    return (x ^ y).dual()\n",
    "\n",
    "GA = Ga('e*1|2|3')\n",
    "print('g =',GA.g)\n",
    "a = GA.mv('a', 'vector')\n",
    "b = GA.mv('b', 'vector')\n",
    "c = GA.mv('c', 'vector')\n",
    "(e1,e2,e3) = GA.mv()\n",
    "print('a =',a)\n",
    "print('b =',b)\n",
    "print('c =',c)\n",
    "\n",
    "print('I =',GA.i)\n",
    "e123 = e1^e2^e3\n",
    "print(r'(e_\\W e_2\\W e_3)^2 =',e123*e123)\n",
    "\n",
    "bc = e123*(b^c)\n",
    "print(r'(e_\\W e_2\\W e_3)(b\\W c) =',bc.Fmt(3))\n",
    "abc = a^bc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$$ (e_\\W e_2\\W e_3)(b\\W c) =  \\begin{align*}  & \\left ( - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{1} c^{2} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{2} c^{1} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{1} c^{3} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{3} c^{1} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  b^{1} c^{2} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  b^{2} c^{1} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{1} c^{3} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{3} c^{1} - \\left ( e_{2}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{2} c^{3} + \\left ( e_{2}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{3} c^{2} + \\left ( e_{2}\\cdot e_{3}\\right ) ^{2} b^{2} c^{3} - \\left ( e_{2}\\cdot e_{3}\\right ) ^{2} b^{3} c^{2}\\right ) \\boldsymbol{e}_{1} \\\\  &  + \\left ( \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{1} c^{2} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{2} c^{1} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{1} c^{3} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{3} c^{1} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  b^{1} c^{2} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  b^{2} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{2} c^{3} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  b^{3} c^{2} - \\left ( e_{1}\\cdot e_{3}\\right ) ^{2} b^{1} c^{3} + \\left ( e_{1}\\cdot e_{3}\\right ) ^{2} b^{3} c^{1} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{2} c^{3} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{3} c^{2}\\right ) \\boldsymbol{e}_{2} \\\\  &  + \\left ( - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  b^{1} c^{2} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  b^{2} c^{1} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{1} c^{3} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{3} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right ) ^{2} b^{1} c^{2} - \\left ( e_{1}\\cdot e_{2}\\right ) ^{2} b^{2} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  b^{1} c^{3} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  b^{3} c^{1} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{2} c^{3} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  b^{3} c^{2} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  b^{2} c^{3} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  b^{3} c^{2}\\right ) \\boldsymbol{e}_{3}  \\end{align*} \n",
       "  $$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Mathematically incorrect but printing works\n",
    "print(r'(e_\\W e_2\\W e_3)(b\\W c) =',bc.Fmt(3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$$ a \\W ((e_1 \\W e_2 \\W e_3)(b \\W c)) =  \\begin{align*}  & \\left ( \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{1} c^{2} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{2} c^{1} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{1} b^{1} c^{3} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{1} b^{3} c^{1} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{1} b^{1} c^{2} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{1} b^{2} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{1} c^{2} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{2} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{1} b^{2} c^{3} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{1} b^{3} c^{2} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{2} b^{1} c^{3} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{2} b^{3} c^{1} - \\left ( e_{1}\\cdot e_{3}\\right ) ^{2} a^{1} b^{1} c^{3} + \\left ( e_{1}\\cdot e_{3}\\right ) ^{2} a^{1} b^{3} c^{1} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{2} b^{1} c^{2} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{2} b^{2} c^{1} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{2} c^{3} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{3} c^{2} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{1} c^{3} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{3} c^{1} + \\left ( e_{2}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{2} b^{2} c^{3} - \\left ( e_{2}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{2} b^{3} c^{2} - \\left ( e_{2}\\cdot e_{3}\\right ) ^{2} a^{2} b^{2} c^{3} + \\left ( e_{2}\\cdot e_{3}\\right ) ^{2} a^{2} b^{3} c^{2}\\right ) \\boldsymbol{e}_{1}\\wedge \\boldsymbol{e}_{2} \\\\  &  + \\left ( - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{1} b^{1} c^{2} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{1} b^{2} c^{1} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{1} c^{3} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{3} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right ) ^{2} a^{1} b^{1} c^{2} - \\left ( e_{1}\\cdot e_{2}\\right ) ^{2} a^{1} b^{2} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{1} b^{1} c^{3} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{1} b^{3} c^{1} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{2} c^{3} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{3} c^{2} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{1} c^{2} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{2} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{1} c^{3} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{3} c^{1} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{1} b^{2} c^{3} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{1} b^{3} c^{2} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{3} b^{1} c^{2} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{3} b^{2} c^{1} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{1} c^{3} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{3} c^{1} + \\left ( e_{2}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{2} c^{3} - \\left ( e_{2}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{3} c^{2} - \\left ( e_{2}\\cdot e_{3}\\right ) ^{2} a^{3} b^{2} c^{3} + \\left ( e_{2}\\cdot e_{3}\\right ) ^{2} a^{3} b^{3} c^{2}\\right ) \\boldsymbol{e}_{1}\\wedge \\boldsymbol{e}_{3} \\\\  &  + \\left ( - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{2} b^{1} c^{2} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{2} b^{2} c^{1} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{1} c^{3} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{3} c^{1} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{1} c^{2} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{2} c^{1} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{1} c^{3} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{3} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right ) ^{2} a^{2} b^{1} c^{2} - \\left ( e_{1}\\cdot e_{2}\\right ) ^{2} a^{2} b^{2} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{2} b^{1} c^{3} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{2} b^{3} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{3} b^{1} c^{2} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{3} b^{2} c^{1} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{2} c^{3} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{3} c^{2} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{2} c^{3} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{3} c^{2} + \\left ( e_{1}\\cdot e_{3}\\right ) ^{2} a^{3} b^{1} c^{3} - \\left ( e_{1}\\cdot e_{3}\\right ) ^{2} a^{3} b^{3} c^{1} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{2} b^{2} c^{3} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{2} b^{3} c^{2} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{2} c^{3} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{3} c^{2}\\right ) \\boldsymbol{e}_{2}\\wedge \\boldsymbol{e}_{3}  \\end{align*} \n",
       "  $$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# FIXME Printing fails for this combination\n",
    "print(r'a \\W ((e_1 \\W e_2 \\W e_3)(b \\W c)) =',abc.Fmt(3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$$ a \\wedge ((e_1 \\wedge e_2 \\wedge e_3)(b \\wedge c)) =  \\begin{align*}  & \\left ( \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{1} c^{2} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{2} c^{1} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{1} b^{1} c^{3} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{1} b^{3} c^{1} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{1} b^{1} c^{2} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{1} b^{2} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{1} c^{2} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{2} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{1} b^{2} c^{3} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{1} b^{3} c^{2} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{2} b^{1} c^{3} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{2} b^{3} c^{1} - \\left ( e_{1}\\cdot e_{3}\\right ) ^{2} a^{1} b^{1} c^{3} + \\left ( e_{1}\\cdot e_{3}\\right ) ^{2} a^{1} b^{3} c^{1} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{2} b^{1} c^{2} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{2} b^{2} c^{1} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{2} c^{3} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{3} c^{2} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{1} c^{3} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{3} c^{1} + \\left ( e_{2}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{2} b^{2} c^{3} - \\left ( e_{2}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{2} b^{3} c^{2} - \\left ( e_{2}\\cdot e_{3}\\right ) ^{2} a^{2} b^{2} c^{3} + \\left ( e_{2}\\cdot e_{3}\\right ) ^{2} a^{2} b^{3} c^{2}\\right ) \\boldsymbol{e}_{1}\\wedge \\boldsymbol{e}_{2} \\\\  &  + \\left ( - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{1} b^{1} c^{2} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{1} b^{2} c^{1} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{1} c^{3} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{3} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right ) ^{2} a^{1} b^{1} c^{2} - \\left ( e_{1}\\cdot e_{2}\\right ) ^{2} a^{1} b^{2} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{1} b^{1} c^{3} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{1} b^{3} c^{1} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{2} c^{3} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{1} b^{3} c^{2} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{1} c^{2} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{2} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{1} c^{3} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{3} c^{1} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{1} b^{2} c^{3} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{1} b^{3} c^{2} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{3} b^{1} c^{2} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{3} b^{2} c^{1} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{1} c^{3} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{3} c^{1} + \\left ( e_{2}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{2} c^{3} - \\left ( e_{2}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{3} c^{2} - \\left ( e_{2}\\cdot e_{3}\\right ) ^{2} a^{3} b^{2} c^{3} + \\left ( e_{2}\\cdot e_{3}\\right ) ^{2} a^{3} b^{3} c^{2}\\right ) \\boldsymbol{e}_{1}\\wedge \\boldsymbol{e}_{3} \\\\  &  + \\left ( - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{2} b^{1} c^{2} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{2} b^{2} c^{1} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{1} c^{3} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{3} c^{1} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{1} c^{2} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{2} c^{1} - \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{1} c^{3} + \\left ( e_{1}\\cdot e_{1}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{3} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right ) ^{2} a^{2} b^{1} c^{2} - \\left ( e_{1}\\cdot e_{2}\\right ) ^{2} a^{2} b^{2} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{2} b^{1} c^{3} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{2} b^{3} c^{1} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{3} b^{1} c^{2} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{1}\\cdot e_{3}\\right )  a^{3} b^{2} c^{1} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{2} c^{3} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{2} b^{3} c^{2} - \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{2} c^{3} + \\left ( e_{1}\\cdot e_{2}\\right )  \\left ( e_{3}\\cdot e_{3}\\right )  a^{3} b^{3} c^{2} + \\left ( e_{1}\\cdot e_{3}\\right ) ^{2} a^{3} b^{1} c^{3} - \\left ( e_{1}\\cdot e_{3}\\right ) ^{2} a^{3} b^{3} c^{1} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{2} b^{2} c^{3} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{2}\\right )  a^{2} b^{3} c^{2} + \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{2} c^{3} - \\left ( e_{1}\\cdot e_{3}\\right )  \\left ( e_{2}\\cdot e_{3}\\right )  a^{3} b^{3} c^{2}\\right ) \\boldsymbol{e}_{2}\\wedge \\boldsymbol{e}_{3}  \\end{align*} \n",
       "  $$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(r'a \\wedge ((e_1 \\wedge e_2 \\wedge e_3)(b \\wedge c)) =',abc.Fmt(3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
